package project.base.common.util

import java.math.BigDecimal
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.temporal.ChronoUnit
import java.util.*

/**
 * 公共工具
 * @author 三味
 * @since 2022/3/4 15:56
 */
object CommonUtil {

    @JvmStatic
    fun main(args: Array<String>) {

    }

    /**
     * 字符
     */
    val chars = arrayOf("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
        "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8",
        "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
        "U", "V", "W", "X", "Y", "Z")

    /**
     * 8位uuid
     */
    fun getShortUuid(): String {
        val shortBuffer = StringBuffer()
        val uuid: String = UUID.randomUUID().toString().replace("-", "")
        for (i in 0..7) {
            val str = uuid.substring(i * 4, i * 4 + 4)
            val x = str.toInt(16)
            shortBuffer.append(chars[x % 0x3E])
        }
        return shortBuffer.toString().toUpperCase()
    }

    /**
     * 32位uuid
     */
    fun get32UUID(): String? {
        return UUID.randomUUID().toString().trim().replace("-", "")
    }


    fun getDayEndSeconds(): Long {

        val midnight = LocalDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault())
            .plusDays(1).withHour(0).withMinute(0)
            .withSecond(0).withNano(0)

        val currentDateTime = LocalDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault())

        return ChronoUnit.SECONDS.between(currentDateTime, midnight)
    }

}
